The transfer and storage of “real-time” data involves ever increasing bandwidth as the uses of electronic information continue to increase. Increased use of real-time data requires maximum transfer rates with minimum data loss or processing errors. Accordingly, interest in data compression has increased, both with respect to “lossless” data compression (in which excess data redundancy is eliminated without data loss) and to “lossy” compression, which removes redundant data as well as data judged to be “insignificant” according to criteria specific to the data application.
Although substantial progress has been made in development of lossless compression techniques, the amount of lossless compression possible in many applications is limited. For image compression, for example, a maximum compression ratio of 2:1 or less is typically realized. Lossy data compression techniques, on the other hand, are capable of substantially greater compression ratios in applications involving time series representations of analog signals (such as speech or music) and two-dimensional arrays representing images (still, motion or video). Thus, in these applications, a portion of the data can be thrown away without noticeable errors during reconstruction.
Image processing applications are particularly suitable for lossy data compression techniques, since in many cases the image data sets are large. Images involve considerable redundancy and can be successfully compressed, using techniques such as the discrete cosine transform (DCT) in accordance with the JPEG (Joint Photographic Experts Group) standard. Compression ratios better than 10:1 without perceptual loss, and 20:1 or better with tolerable losses, can be achieved using the JPEG DCT compression or other JPEG compression techniques.
Typical image compression systems, when using a compression technique such as one of the JPEG standardized techniques, input a frame or large set of real-time image data into a buffer memory. Once all of the image data has been stored in the buffer memory, the image data must be read-out of the memory so it can be encoded or compressed by an image compression engine or encoder logic. Since the system runs in real-time, additional image data is often received during the time the first set of data is undergoing or about to undergo compression. To ensure that none of the real-time input data overwrites the stored data, a second buffer memory is required to input the new image data (so the first set of image data can be readout from the first buffer memory). The buffer memories used to store the input data can be rather large (on the order of megabytes), which takes up valuable space in the system and adds increased cost to the system. This is undesirable.
Accordingly, there is a need and desire to reduce the amount of buffer memory required to compress data in a real-time application such as e.g., an imager.